﻿// P49 【蓝桥杯省赛】k倍区间.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

/*
https://www.starrycoding.com/problem/49

给定一个长度为n的数组a和一个整数k，请求出数组中有多少个连续子序列之和是k的倍数。

输入描述
第一行两个整数n,k(1≤n,k≤10^5 )。
第二行n个整数表示 (1≤ai≤10^9)。

输出描述
一行一个整数表示结果。

6 3
1 1 4 5 1 4

5




10 9
2 7 4 3 2 7 4 5 4 5




*/


#include <iostream>
#include <unordered_map>

using namespace std;


const int N = 100010;
int arr[N];
long long pre[N];
int n, k;

int main()
{
	cin >> n >> k;
	for (int i = 1; i <= n; i++) {
		cin >> arr[i];
		arr[i] %= k;
		pre[i] = pre[i - 1] + arr[i];
	}

	unordered_map<int, int> mm;
	mm[0] = 1; long long ans = 0;
	for (int i = 1; i <= n; i++) {
		int curr = pre[i]%k;
		ans += mm[curr];
		mm[curr]++;
	}

	cout << ans << endl;

}
 